package day06;
/*
    需求:打印杨辉三角行(行数可以键盘录入)

    1
    1  1
    1  2  1
    1  3  3  1
    1  4  6  4  1
    1  5  10 10 5 1

    分析: 看这种图形的规律
        A:任何第一行的最后一列都是1
        B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和.
            最后一列除外

    步骤:
       A:首先定义一个二维数组.行数如果是n,我们把列数也先定义为n.
         这个n的数据来自键盘录入
       B:给这个二维数组任何一行的第一列和最后一列赋值为1
       C:按照规律给其他元素赋值
         从第三行开始,每一个数据是他上一行的前一列和它上一行的本列之和
       D:遍历这个二维数组
 */

import java.util.Scanner;

public class Array2Test3 {
    public static void main(String[] args){
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        //这个n对象来自键盘录入
        System.out.println("请输入一个数据:");
        int n = sc.nextInt();

        //定义一个二维数组
        int[][] arr = new int[n][n];

        //给这个二维数组任何一行的第一列和最后一列赋值为1
        for(int x = 0;x<arr.length;x++){
            arr[x][0] = 1; //任何一行的第一列
            arr[x][x] = 1; //任何一行的最后一列
        }

//        C:按照规律给其他元素赋值
//                从第三行开始,每一个数据是他上一行的前一列和它上一行的本列之和
        for(int x=2;x<arr.length;x++){
            //这里如果y<=x是有一个小问题的,就是最后一列的问题
            //所以要减去1
            for(int y=1;y<=x-1;y++){
                //每一个数据是他上一行的前一列和它上一行的本列之和
                arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
            }

        }



//        //遍历这个二维数组
//        for(int i=0;i<arr.length;i++){
//            for(int j=0;j<arr[i].length;j++){
//                System.out.print(arr[i][j]+"  ");
//            }
//            System.out.println();
//        }
//        System.out.println();

         /*
        输入:5
        输出结果:
        1  0  0  0  0
        1  1  0  0  0
        1  0  1  0  0
        1  0  0  1  0
        1  0  0  0  1

        输出的结果是有问题的,要的在每一行最后一位1后面不应该再出现0,
        应该输出的是三角形,所以改进上面的循环遍历
     */


        //遍历这个二维数组
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<=i;j++){          //这里改成j<=i,再次运行一次
                System.out.print(arr[i][j]+"  ");
            }
            System.out.println();
        }
        System.out.println();

        /*
            请输入一个数据:
            5

            1
            1  1
            1  0  1
            1  0  0  1
            1  0  0  0  1

            达到初期的理想效果
         */


    }


}
